<?php

/**
 * SettingsController
 * 
 * Контроллер для управления настройками приложения
 * 
 * @package   Basic
 * @author    Игорь Будасов aka Lord <igor.budasov@gmail.com> 
 * @copyright Игорь Будасов aka Lord <igor.budasov@gmail.com> 
 */
 
class SettingsController extends Lord_Controller_Action 
{
	
/*------------------------------------------------------------------------------*/

	/**
	 * Главная страница настроек: 
	 * формочка с отображением всех настроек приложения
	 */
	 
	public function indexAction() 
	{   
		$data = array();
		// показываем форму
		$form = $this->_form($data, array());
		$this->view->assign('form', $form); 


		// валидация
		if (!empty($_POST)) 
		{
			if (!$form->isValid($_POST)) 
			{   
				// показываем сообщение об ошибке
				$this->view->assign('err', 'form_fail');
				// получаем невалидные значения, введенные в форму         
				$values = $form->getUnfilteredValues();
				// получаем ошибки
				$errors = $form->getErrors(); 
				// показываем форму с невалидными данными
				return $this->view->assign('form', $this->_form($values, $errors));
			}
		}
		
		/**
		* обрабатываем форму
		*/
		// если к нам что-то пришло из поста
		if ($this->_request->isPost()) 
		{    
			// получаем корректные данные, введенные юзером
			$values = $form->getValues();


			// зачитываем пользоватльские настройки 
			$model = new Basic();
			$settings = $model->getOptions()->toArray();
			// немного пересортируем для приведения к виду конфига
			foreach($settings as $k=>$v)
			{          
				$data['value_current'] = $values[$v['option_key']];
				$model->updateOptions($data, $v['option_key']);
			}

			// return $this->_redirect('default/settings');
			return $this->view->assign('msg', 'default_settings_index_ok');
			
		}  
	}

/*==============================================================================*/
	
	/**
	* Приватный метод для построения формы
	* В качестве аргумента принимает уже заполненые 
	* данные (при редактировании)
	* 
	* @param $data array 
	* @param $errors array
	* @param $action string
	* @param $categories array
	* @return object
	*/
	
	private function _form($data = array(), 
						   $errors = array())
	{
		// обратите внимание, форма создается на основе собственного класса. 
		$form = new Lord_Form_Form();
		$form->setAction( '/' . $this->_moduleName .
						  '/' . $this->_controllerName )
			 ->setMethod('post');
		
		// кодировка	 
		$charset = $this->_helper->config()->common->charset;

		// зачитываем пользоватльские настройки 
		$model = new Basic();
		$settings = $model->getOptions()->toArray();
		
		foreach($settings as $v)
		{
            if($v['option_type'] == 'select')
            {
                
                $preValues = explode(';', $v['value_list']);
                foreach($preValues as $val)
                {
                    $parts = explode('=', $val);
                    $values[$parts[0]] = $parts[1];
                }
                
                $$v['option_key'] = new Zend_Form_Element_Select($v['option_key'], array(
                    'label'       => $v['option_title'],
                    'multiOptions'=> $values,
                    'required'    => true, 
                    'filters'     => array('Int'),
                    'value'       => $v['value_current'] ,
                    'description' => $v['option_desc']
                ));
                $form->addElement($$v['option_key']);
            }

			if($v['option_type'] == 'text')
			{
				$$v['option_key'] = new Zend_Form_Element_Text($v['option_key'], array(
					'label'       => $v['option_title'],
					'required'    => true, 
					'value'       => $v['value_current'],
                    'description' => $v['option_desc']
				));
                $$v['option_key']->addValidator('StringLength', true, array(0, 250, $charset));
                $$v['option_key']->setAttrib   ('maxlength', 250);
				$form->addElement($$v['option_key']);
			}
		}
				

		// кнопка сабмита	
		$form->addElement('submit', 'save', array('label' => $this->view->translate('default_settings_form_submit')));
			
		// ошибки
		$this->_helper->FormErrors($errors, $form);
		
		return $form;
	}
	
/*------------------------------------------------------------------------------*/

}